/*
* 
* Fichier source projet intel Acceler8 sous license GNU GPL v3.
* Voir http://www.gnu.org/copyleft/gpl.html pour plus d'informations
* La license est egalement disponible dans le repertoire /doc
* 
* Cree le : mercredi 09 novembre 2011 à 23 : 55.
* Auteurs : Axel MOINET et Arnaud DURAND.
* 
* Nom de fichier : taskssumpmax.cpp
* Chemin du fichier : ./src/classes/taskssumpmax/taskssumpmax.cpp
* 
* Description :
* 
*/

#include "taskssumpmax.h"

taskSsumPmax::taskSsumPmax(tbb::concurrent_vector<int> *p_cgh, tbb::concurrent_vector<int> *p_ssum, tbb::concurrent_vector<int> *p_pmax) {
	this->cgh = p_cgh;
	this->ssum = p_ssum;
	this->pmax = p_pmax;
}

taskSsumPmax::~taskSsumPmax() {

}

tbb::task* taskSsumPmax::execute() {
	this->computeSSUM();
	this->computePMAX();
	return NULL;
}

int taskSsumPmax::computeSSUM() {
	this->tabSize = (*(this->cgh)).size();

	this->ssum->grow_by(this->tabSize);
	(*(this->ssum))[this->tabSize-1] = (*(this->cgh))[this->tabSize-1];

	for(int i=this->tabSize-2; i >= 0; i--) {
		(*(this->ssum))[i] = (*(this->ssum))[i+1] + (*(this->cgh))[i];
	}

	return 0;
}

int taskSsumPmax::computePMAX() {
	this->pmax->grow_by(this->tabSize);

	(*(this->pmax))[0] = (*(this->ssum))[0];

	for(int i=1; i < this->tabSize; i++) {
		if((*(this->ssum))[i] > (*(this->pmax))[i-1])
			(*(this->pmax))[i] = (*(this->ssum))[i];
		else
			(*(this->pmax))[i] = (*(this->pmax))[i-1];
	}


	return 0;
}
